using System;
using System.Linq;
using System.Runtime.Serialization;
using System.Data.Objects.DataClasses;
using System.Xml.Serialization;
using System.ComponentModel;
using System.Collections.Generic;
using System.Text;
using Acme.Northwind.EFDAL.Interfaces;

namespace Acme.Northwind.EFDAL.Interfaces.Entity
{
	/// <summary>
	/// This is the base interface for the EF entity for Order
	/// </summary>
	public partial interface IOrder : nHydrate.EFCore.DataAccess.IBusinessObject, nHydrate.EFCore.DataAccess.INHEntityObject, System.ComponentModel.IDataErrorInfo, System.IEquatable<Acme.Northwind.EFDAL.Interfaces.Entity.IOrder>, nHydrate.EFCore.DataAccess.IAuditable
	{
		#region Properties

		/// <summary>
		/// The property that maps back to the database 'Orders.CustomerID' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DisplayName("CustomerID")]
		string CustomerID { get; set; }

		/// <summary>
		/// The property that maps back to the database 'Orders.EmployeeID' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DisplayName("EmployeeID")]
		int? EmployeeID { get; set; }

		/// <summary>
		/// The property that maps back to the database 'Orders.Freight' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DisplayName("Freight")]
		decimal? Freight { get; set; }

		/// <summary>
		/// The property that maps back to the database 'Orders.OrderDate' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DisplayName("OrderDate")]
		DateTime? OrderDate { get; set; }

		/// <summary>
		/// The property that maps back to the database 'Orders.OrderID' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DataAnnotations.Key()]
		[System.ComponentModel.ReadOnly(true)]
		[System.ComponentModel.DisplayName("OrderID")]
		int OrderID { get; set; }

		/// <summary>
		/// The property that maps back to the database 'Orders.RequiredDate' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DisplayName("RequiredDate")]
		DateTime? RequiredDate { get; set; }

		/// <summary>
		/// The property that maps back to the database 'Orders.ShipAddress' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DisplayName("ShipAddress")]
		string ShipAddress { get; set; }

		/// <summary>
		/// The property that maps back to the database 'Orders.ShipCity' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DisplayName("ShipCity")]
		string ShipCity { get; set; }

		/// <summary>
		/// The property that maps back to the database 'Orders.ShipCountry' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DisplayName("ShipCountry")]
		string ShipCountry { get; set; }

		/// <summary>
		/// The property that maps back to the database 'Orders.ShipName' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DisplayName("ShipName")]
		string ShipName { get; set; }

		/// <summary>
		/// The property that maps back to the database 'Orders.ShippedDate' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DisplayName("ShippedDate")]
		DateTime? ShippedDate { get; set; }

		/// <summary>
		/// The property that maps back to the database 'Orders.ShipPostalCode' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DisplayName("ShipPostalCode")]
		string ShipPostalCode { get; set; }

		/// <summary>
		/// The property that maps back to the database 'Orders.ShipRegion' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DisplayName("ShipRegion")]
		string ShipRegion { get; set; }

		/// <summary>
		/// The property that maps back to the database 'Orders.ShipVia' field
		/// </summary>
		[System.ComponentModel.Browsable(true)]
		[System.ComponentModel.DisplayName("ShipVia")]
		int? ShipVia { get; set; }

		/// <summary>
		/// The audit field for the 'Created By' column.
		/// </summary>
		[System.ComponentModel.Browsable(false)]
		string CreatedBy { get; }

		/// <summary>
		/// The audit field for the 'Created Date' column.
		/// </summary>
		[System.ComponentModel.Browsable(false)]
		DateTime? CreatedDate { get; }

		/// <summary>
		/// The audit field for the 'Modified By' column.
		/// </summary>
		[System.ComponentModel.Browsable(false)]
		string ModifiedBy { get; }

		/// <summary>
		/// The audit field for the 'Modified Date' column.
		/// </summary>
		[System.ComponentModel.Browsable(false)]
		DateTime? ModifiedDate { get; }

		#endregion

		#region Navigation Properties

		/// <summary>
		/// The back navigation definition for walking Order->OrderDetail
		/// </summary>
		[XmlIgnoreAttribute()]
		[SoapIgnoreAttribute()]
		[DataMemberAttribute()]
		[EdmRelationshipNavigationPropertyAttribute("Acme.Northwind.EFDAL.Interfaces.Entity", "FK_Order_details_orders_OrderDetail_Order", "Order_details_ordersOrderDetailList")]
		ICollection<Acme.Northwind.EFDAL.Interfaces.Entity.IOrderDetail> Order_details_ordersOrderDetailList { get; }

		/// <summary>
		/// The navigation definition for walking Order->Customer
		/// </summary>
		Acme.Northwind.EFDAL.Interfaces.Entity.ICustomer Customer { get; set; }

		/// <summary>
		/// The navigation definition for walking Order->Employee
		/// </summary>
		Acme.Northwind.EFDAL.Interfaces.Entity.IEmployee Employee { get; set; }

		/// <summary>
		/// The navigation definition for walking Order->Shipper
		/// </summary>
		Acme.Northwind.EFDAL.Interfaces.Entity.IShipper Shipper { get; set; }

		#endregion

	}

}

#region Metadata Class

namespace Acme.Northwind.EFDAL.Interfaces.Entity.Metadata
{
	/// <summary>
	/// Metadata class for the 'Order' entity
	/// </summary>
	public partial class OrderMetadata : nHydrate.EFCore.DataAccess.IMetadata
	{
		#region Properties

		/// <summary>
		/// Metadata information for the 'CustomerID' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.StringLength(5, ErrorMessage = "The property 'CustomerID' has a maximum length of 5")]
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "CustomerID", AutoGenerateField = true)]
		public object CustomerID;

		/// <summary>
		/// Metadata information for the 'EmployeeID' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "EmployeeID", AutoGenerateField = true)]
		public object EmployeeID;

		/// <summary>
		/// Metadata information for the 'Freight' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "Freight", AutoGenerateField = true)]
		public object Freight;

		/// <summary>
		/// Metadata information for the 'OrderDate' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "OrderDate", AutoGenerateField = true)]
		public object OrderDate;

		/// <summary>
		/// Metadata information for the 'OrderID' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.Required(ErrorMessage = "'OrderID' is required.")]
		[System.ComponentModel.DataAnnotations.Key()]
		[System.ComponentModel.DataAnnotations.Editable(false)]
		[System.ComponentModel.ReadOnly(true)]
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "OrderID", AutoGenerateField = true)]
		public object OrderID;

		/// <summary>
		/// Metadata information for the 'RequiredDate' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "RequiredDate", AutoGenerateField = true)]
		public object RequiredDate;

		/// <summary>
		/// Metadata information for the 'ShipAddress' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.StringLength(60, ErrorMessage = "The property 'ShipAddress' has a maximum length of 60")]
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "ShipAddress", AutoGenerateField = true)]
		public object ShipAddress;

		/// <summary>
		/// Metadata information for the 'ShipCity' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.StringLength(15, ErrorMessage = "The property 'ShipCity' has a maximum length of 15")]
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "ShipCity", AutoGenerateField = true)]
		public object ShipCity;

		/// <summary>
		/// Metadata information for the 'ShipCountry' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.StringLength(15, ErrorMessage = "The property 'ShipCountry' has a maximum length of 15")]
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "ShipCountry", AutoGenerateField = true)]
		public object ShipCountry;

		/// <summary>
		/// Metadata information for the 'ShipName' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.StringLength(40, ErrorMessage = "The property 'ShipName' has a maximum length of 40")]
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "ShipName", AutoGenerateField = true)]
		public object ShipName;

		/// <summary>
		/// Metadata information for the 'ShippedDate' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "ShippedDate", AutoGenerateField = true)]
		public object ShippedDate;

		/// <summary>
		/// Metadata information for the 'ShipPostalCode' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.StringLength(10, ErrorMessage = "The property 'ShipPostalCode' has a maximum length of 10")]
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "ShipPostalCode", AutoGenerateField = true)]
		public object ShipPostalCode;

		/// <summary>
		/// Metadata information for the 'ShipRegion' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.StringLength(15, ErrorMessage = "The property 'ShipRegion' has a maximum length of 15")]
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "ShipRegion", AutoGenerateField = true)]
		public object ShipRegion;

		/// <summary>
		/// Metadata information for the 'ShipVia' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.DisplayAttribute(Description = "", Name = "ShipVia", AutoGenerateField = true)]
		public object ShipVia;

		/// <summary>
		/// Metadata information for the 'CreatedBy' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.StringLength(100, ErrorMessage = "The property 'CreatedBy' has a maximum length of 100")]
		[System.ComponentModel.ReadOnly(true)]
		public object CreatedBy;

		/// <summary>
		/// Metadata information for the 'CreatedDate' parameter
		/// </summary>
		[System.ComponentModel.ReadOnly(true)]
		public object CreatedDate;

		/// <summary>
		/// Metadata information for the 'ModifiedBy' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.StringLength(100, ErrorMessage = "The property 'ModifiedBy' has a maximum length of 100")]
		[System.ComponentModel.ReadOnly(true)]
		public object ModifiedBy;

		/// <summary>
		/// Metadata information for the 'ModifiedDate' parameter
		/// </summary>
		[System.ComponentModel.ReadOnly(true)]
		public object ModifiedDate;

		/// <summary>
		/// Metadata information for the 'Timestamp' parameter
		/// </summary>
		[System.ComponentModel.DataAnnotations.Timestamp()]
		[System.ComponentModel.ReadOnly(true)]
		public object Timestamp;

		#endregion

	}

}

#endregion

